/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fait.ferm.ui;

import fait.ferm.global.Glob;
import fait.ferm.persists.Credit;
import fait.ferm.persists.Credit_type;
import fait.ferm.persists.Ferm;
import fait.ferm.persists.SimpleDirItem;
import java.net.URL;
import java.sql.Date;
import java.util.ArrayList;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.BorderPane;

/**
 *
 * @author Greg
 */
public class CreditTabDialogController implements Initializable {

    @FXML
    private BorderPane dialogWindow;
    @FXML
    private ComboBox creditsList;
    @FXML
    private TextField sum;
//    сумма которую можно максимально взять, думаю она должна быть как-то связана с текущими долгами и прибылью, но пока фиксировано 100,000,000.00р.
    @FXML
    private Label maxSum;
    @FXML
    private Label percentLabel;
    @FXML
    private Label monthSum;
    @FXML
    private Label sumEnd;
    @FXML
    private Label dateEnd;
    /////
    @FXML
    private Label ErrLabel;
    
    /**Переменные для хранения информации о кредите (ставки, длительности)**/
    private int percent;
    private int years;
    private int credit_type_id;
    /****/
    
    /**Переменные для информации по выплатам**/
    double amountEnter = 0.0;   //запрашиваемая сумма
    double amountGiven = 0.0;   //вся сумма
    double amountMonth = 0.0;   //сумма в месяц
    Date date_end;              //окончание выплат
    /****/
    
    /**Переменные для хранения критических значений сумм кредита**/
    double maxValueCredit = 9000000.0;
    double minValueCredit = 50000.0;
    /****/
    
    @FXML
    private void dialogWindowCloseClick() {
        //TODO
        dialogWindow.getChildren().clear();
        //dialogWindow.setVisible(false);
		Glob.dialogPane.toBack();
    }
    
    //Регистрация кредита в банке
    @FXML
    private void regCredit() {
        try {
            amountEnter = Double.valueOf(sum.getText());
        } catch (Exception ex) {
            //
        }
        try {
            if(creditsList.getValue() != null) {
                if(!Double.isNaN(amountEnter)) {
                    if(amountEnter >= minValueCredit) {
                        if(amountEnter <= maxValueCredit) {
                            Credit newCredit = new Credit();
                                newCredit.amount_given = amountGiven;
                                newCredit.credit_type_id = credit_type_id;
                                newCredit.date_end = date_end;
                                newCredit.save();
                            System.out.println("New credit");
                            
                            Ferm f = Glob.getFerm();
                            f.pc += amountEnter;
                            f.save();
                            
                            dialogWindowCloseClick();
                        } else {
                            ErrLabel.setText("Указана слишком большая сумма кредита, максимум " + maxValueCredit);
                        }
                    } else {
                        ErrLabel.setText("Указана слишком маленькая сумма кредита, минимум " + minValueCredit);
                    }
                } else {
                    ErrLabel.setText("Указана некорректная сумма");
                }
            } else {
                ErrLabel.setText("Не выбран кредит");
            }
        } catch (Exception ex) {
            Logger.getLogger(CreditTabDialogController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    /*//Расчет всех показателей для выплат//*/
    private void calculationOfParameters() {
        int enterSum = 0;
        try {
            enterSum = Integer.parseInt(sum.getText());
        } catch(Exception ex) {
            //
        } finally {
            try {
                amountGiven = enterSum * (100 + percent) / 100f;
                amountMonth = amountGiven / (years * 12f);
            } catch (ArithmeticException ex) {
                //
            } finally {
                sumEnd.setText(String.format("%.2f", amountGiven));
                monthSum.setText(String.format("%.2f", amountMonth));
            }
        }
    }
    
    @Override
    public void initialize(URL location, ResourceBundle resources) {
        final String table = "credit_type";
        
        //загрузка списка кредитов в combo box
        creditsList.getItems().clear();
        int id = 0;
        SimpleDirItem buf = null;
        while((buf = Glob.getObjInCache(table, ++id)) != null) {
            creditsList.getItems().add(buf.getName());
        }
        
        //загрузка информации о выбранном кредите
        creditsList.setOnAction(new EventHandler() {
            
            @Override
            public void handle(Event event) {
                int index = creditsList.getSelectionModel().getSelectedIndex();
                ArrayList <Credit_type> al = (ArrayList)Glob.getFermEngine().getCreditType().obj;
                percent = (int)(al.get(index).percent * 100);
                years = al.get(index).years;
                credit_type_id = al.get(index).getId();
                
                date_end = new Date(Glob.getGame().current_date.getTime());
                date_end.setYear(Glob.getGame().current_date.getYear() + years);
                
                percentLabel.setText(percent + "%");
                maxSum.setText(String.format("%.2f", maxValueCredit));
                dateEnd.setText(date_end.toString());
                
                if(sum.getText().length() != 0) {
                    calculationOfParameters(); //расчёт показателей после смены ТП
                }
            }
            
        });
        
        //ввод суммы
        sum.setOnKeyReleased(new EventHandler<KeyEvent>() {
            
            @Override
            public void handle(KeyEvent event) {
                String enterChar = event.getText();
                
                /*//ФИЛЬТР ЛИШНИХ СИМВОЛОВ, допустимы только цифры (0..9)//*/
                if(enterChar.length() > 0) {
                    if((enterChar.charAt(0) - '0' > 9) || (enterChar.charAt(0) - '0' < 0)) {
                        int caretPos = sum.caretPositionProperty().get() - 1;
                        sum.setText(sum.getText().replaceAll(enterChar, ""));
                        sum.selectRange(caretPos, caretPos);
                    }
                }
                /****/
                
                calculationOfParameters(); //расчёт показателей
            }
            
        });
    }
    
}
